package cn.xdwanj.config

import cn.xdwanj.interceptors.EmpInterceptor
import com.google.gson.Gson
import org.springframework.context.annotation.Configuration
import org.springframework.http.converter.HttpMessageConverter
import org.springframework.http.converter.json.GsonHttpMessageConverter
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer
import org.springframework.web.servlet.config.annotation.EnableWebMvc
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer

@Configuration
@EnableWebMvc
open class SpringWebConfig : WebMvcConfigurer {
  // 静态资源放行
  override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) = configurer.enable()

  // 我估计因为其本身就是注解开发了, 所以默认开启了Mvc注解模式不用写
  // <mvc:annotation-driven/>

  override fun addInterceptors(registry: InterceptorRegistry) {
    registry.apply {
      // 添加拦截器 => 添加拦截地址 => 添加忽视地址
      addInterceptor(EmpInterceptor())
        .addPathPatterns("/**")
        .excludePathPatterns("/my/emp")
    }
  }

  /*
    添加自定义消息转换器不覆盖默认转换器请使用 extendMessageConverters
    添加自定义会覆盖默认转换器使用 configureMessageConverters
   */
  override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
    // 将默认的转化器集合替换掉, 加入 Gson
    converters += GsonHttpMessageConverter(Gson())
    /*
      不一定要通过这两个方法才能替换 json 解析器,
      直接通过在配置类中定义 HttpMessageConverter 的 bean 也是可以的
     */
  }
//  override fun extendMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
//    super.extendMessageConverters(converters)
//  }

}